#include <stdio.h>
#include <unistd.h>
#include "./include/ipc.h"

int main(int argc, char *argv[])
{
    printf("\t\t\t\t\tconsumer start work: \n");
    //
    // 申请共享内存
    //
    int shmid = get_shm(SHM_KEY);
    //
    // 绑定共享内存到进程地址空间
    //
    shmd_t* shmd_ptr = (shmd_t*)attach_shm(shmid);

    //
    // 申请信号量
    //
    int metuxid = get_sem(MUTEX_KEY);
    int fullid = get_sem(FULL_KEY);
    int emptyid = get_sem(EMPTY_KEY);

    //
    // 不断地消费数据
    //
    int data;
    for(;;) {

        usleep(1000 * shmd_ptr->c_speed);   //控制消费速率

        //
        // 先预读
        //
        sem_pv(metuxid, -1);  // p操作
            data = shmd_ptr->buffer[shmd_ptr->c];
        sem_pv(metuxid, 1);   // v操作

        //
        // 判断退出
        //
        if( 0 == data && -1 == shmd_ptr->p) {
            //
            // 生产者已经停产，且数据已经消费完
            //
            break;  
        }

        //
        // 消费数据
        //
        sem_pv(fullid, -1);     // p操作
        sem_pv(metuxid, -1);    // p操作
            data = shmd_ptr->buffer[shmd_ptr->c];
            printf("\t\t\t\t\tconsumer use data %d [spd: %d]\n", data, shmd_ptr->c_speed);
            shmd_ptr->buffer[shmd_ptr->c] = 0;  
            shmd_ptr->c = (shmd_ptr->c + 1) % BUFFER_SIZE;
        sem_pv(metuxid, 1);     // v操作
        sem_pv(emptyid, 1);     // v操作
    }

    printf("\t\t\t\t\tconsumer over!\n");

    return 0;
}
